home *** CD-ROM | disk | FTP | other *** search
/ Nejlepší hry / Nejlepsi hry.iso / hry / sea of chaos / sea_install.msi / _15C39AAA7726369D39812BD40F01CF6A / _C29F373318B24B5C8B9E9CF69DA18327 < prev    next >
Text File  |  2005-08-15  |  1KB  |  52 lines

  1. ///impact particle shader
  2. //input should be 4 points that are the same, tex coord will expand them in screen space
  3. //3rd tex coord is rotation amount
  4. //Luke Lenhart
  5. //(C)2004-2005 Digipen Institute of Technology
  6.  
  7. //world,view,projection transform
  8. float4x4 matViewProj;
  9.  
  10. //camera position in world space
  11. float4 cameraPos;
  12.  
  13. //particle size modifier
  14. float size;
  15.  
  16. //shader input
  17. struct VS_INPUT
  18. {
  19.     float4 Pos : POSITION;
  20.     float4 Color : COLOR;
  21.     float3 Tex0 : TEXCOORD0;
  22. };
  23.  
  24. //shader output
  25. struct VS_OUTPUT
  26. {
  27.     float4 Pos : POSITION;
  28.     float4 Color : COLOR;
  29.     float2 Tex0 : TEXCOORD0;
  30. };
  31.  
  32. //shader code
  33. VS_OUTPUT VShader(VS_INPUT In)
  34. {
  35.     VS_OUTPUT Out;
  36.     
  37.     //transform pos and copy tex coord and color over
  38.     Out.Pos=mul(matViewProj,In.Pos);
  39.     Out.Tex0=In.Tex0;
  40.     Out.Color=In.Color;
  41.     
  42.     //rotate and expand outwards from center point, based on distance and tex coord
  43.     float2x2 matRot={cos(In.Tex0.z),sin(In.Tex0.z),-sin(In.Tex0.z),cos(In.Tex0.z)};
  44.     float2 posOffset=mul(matRot,In.Tex0.xy-0.5f);
  45.     
  46.     float dist=distance(cameraPos,In.Pos);    
  47.     Out.Pos.xy+=(1.0f/sqrt(dist))*posOffset*size;
  48.  
  49.     //spit out the results
  50.     return Out;
  51. }
  52.